/* The is the Rover Team Project Code for The California Institute of Technology 2012.
Copyright (C) 2012 scchang, bryanhe, dflicker

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. */
#ifndef COMMAND_H_
#define COMMAND_H_

#include "input_state.h"
#include "rover_state.h"
#include <config.h>

#include <math.h>

class Command{
 public:
  // Constructors
  Command(InputState* in_state, RoverState* rvr_state);
  Command(RoverState* rvr_state);
  Command(void){

  }

  // Deconstructor
  ~Command(void){}

  // Methods

  // Accessors
  unsigned char getValue(Command_Component comp);


  // Manipulation
  int toString(unsigned char** buffer);

  static int getStringLength(void);
  static Command getCommand(unsigned char* input);

  // Verify
  static void verify(void);

  int setValue(Command_Component comp, char value);
  
 protected:
  // Members
  unsigned char comps[NUM_COMMAND_COMS];


  int getPerpSetting(int rover_x, int rover_y, int tar_x, int tar_y);
};
#endif
